求n的乘阶
func factorial(n int) int {
	if n == 0 {
		return 1
	}
	return n * factorial(n-1)
	//这个公式值变换过程，由上到下的顺序
	//5 * 4
	//4 * 3
	//3 * 2
	//2 * 1
	//1 * 1
	//根据公式值变换过程进行计算,由下到上的顺序
	// 1 * 1 = 1
	// 2 * 1 = 2
	// 3 * 2 = 6
	// 4 * 6 =24
	// 5 * 24 = 120
	// 其中第二个操作符是根据公式的值得来的

}

func main() {
	n := 5
	result := factorial(n)
	fmt.Printf("%d 的阶乘是 %d\n", n, result)
}
//输出
5 的阶乘是 120

编写一个函数，接受一个参数n，n为正整数要求：数字对齐
func Array(n int) {
	for i := 1; i <= n; i++ {
		for j := 1; j <= i; j++ {
			//"%-3d"左对齐打印
			fmt.Printf("%-3d", j)
		}
		fmt.Println()
	}
}

func main() {
	n := 12
	Array(n)
}
//输出
1  
1  2  
1  2  3  
1  2  3  4  
1  2  3  4  5  
1  2  3  4  5  6  
1  2  3  4  5  6  7  
1  2  3  4  5  6  7  8  
1  2  3  4  5  6  7  8  9  
1  2  3  4  5  6  7  8  9  10 
1  2  3  4  5  6  7  8  9  10 11 
1  2  3  4  5  6  7  8  9  10 11 12 
简述defer作用和应用
defer是Go语言提供的一个关键字，用于延迟函数或方法的执行，即在函数执行结束前才会执行被defer延迟的代码块。defer的作用和应用包括以下几个方面：
1. 资源释放：defer常用于释放资源，比如打开文件、数据库连接、网络连接等，在函数执行结束时进行资源释放操作。通过defer延迟关闭文件或释放资源，可以确保资源得到正确释放，避免资源泄露。
2. 错误处理：在Go中，defer经常和recover结合使用来进行错误处理。defer可以用来注册一个函数，在函数执行发送panic时，该函数会被调用，类似于try-catch-finally中finally块。在defer函数中可以使用recover来捕获panic，进行错误处理。
3. 函数结束前操作：通过defer可以确保某些操作在函数执行结束前执行，无论函数是正常返回还是发生异常。这样可以保证在函数执行完毕时执行一些必要的收尾工作，比如日志记录、性能监控等。
4. 代码简化：defer中还可以用来简化代码逻辑，将一些需要延迟执行的清理操作直接卸载函数开始处、使得代码更加清洗易懂。
5. 延迟调用：defer中可以延迟调用匿名函数，可以在定义时获取外部变量的值，从而实现一些特定的功能。
总之，defer的作用在于延迟执行指定的操作，通常用于资源释放，错误处理，操作简化等方面，有助于提供代码的可读性，可维护性和健壮性。